{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# https://www.douyin.com/video/6736076662053653763 抓取这个页面中的部分评论内容\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入必要的包\n",
    "import time\n",
    "from selenium import webdriver\n",
    "from selenium.webdriver.chrome.service import Service\n",
    "from selenium.webdriver.edge.options import Options as EdgeOptions\n",
    "from selenium.webdriver.common.by import By"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用selenium启动edge\n",
    "# 初始化selenium，这里需要注意的是，driver的版本必须与当前使用的浏览器版本保持一致，否则会报错。\n",
    "service = Service(r'C:\\cmder\\msedgedriver.exe')  # Windows 配置\n",
    "\n",
    "service.start()\n",
    "\n",
    "# 设定edge浏览器选项\n",
    "options = EdgeOptions()\n",
    "# options.use_chromium = True\n",
    "# options.add_argument(\"headless\")\n",
    "# options.add_argument(\"disable-gpu\")\n",
    "\n",
    "# 创建driver服务\n",
    "driver = webdriver.Remote(service.service_url, options=options)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用Edge打开页面，并获取指定内容\n",
    "url = 'https://www.douyin.com/video/6736076662053653763'\n",
    "driver.get(url)\n",
    "time.sleep(5)\n",
    "total_comments = driver.find_element(By.XPATH, '//*[@id=\"root\"]/div/div[2]/div/div[1]/div[1]/div[3]/div/div[2]/div[1]/div[2]/span')\n",
    "# total_comments.text\n",
    "comment1 = driver.find_element(By.XPATH, '//*[@id=\"root\"]/div/div[2]/div/div[1]/div[3]/div/div/div[4]/div[1]/div/div[2]/p/span[1]/span/span/span/span')\n",
    "//*[@id=\"root\"]/div/div[2]/div/div[1]/div[3]/div/div/div[4]/div[2]/div/div[2]/p/span[1]/span/span/span/span/span\n",
    "//*[@id=\"root\"]/div/div[2]/div/div[1]/div[3]/div/div/div[4]/div[1]/div/div[2]/p/span[1]/span/span/span/span"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "学校都统一的嘛我们当年教官也是悄悄就走了\n",
      "和我们学校一样，也是军训完汇报表演完，教官就偷偷走了\n",
      "教官走的时候什么也没跟我们说，很难受\n",
      "结束后我们追出去，教官在走的大巴车上给我竖起大拇指 我瞬间哭成狗。\n",
      "为什么女生会喜欢上教官\n",
      "教官说过的一句话，你们的一生我们只是过客\n",
      "我记得他们说过，我们只是你们成长路上的过客，马上我们将原路返回，你们继续前行。说实话我眼眶湿了。\n",
      "教官总是偷偷的走了，我一直好想他 好怀念一起的时光，知道有一天我在澡堂见到了他，我才知道他是我学长，\n",
      "我们教官也是，悄悄的就走了，桑心\n",
      "在前几天，也就是军训的最后一天，看见他们走的背影，瞬间崩溃了\n",
      "我们教官提前跟我们说他会半路跳车回来的，结果真的回来了\n",
      "我们会操的时候，总教直接教官出列集合，给我们敬个礼就直接走了\n",
      "教官走的时候，我一直转着头看他们离开，当时就我一个哭的特别伤心\n",
      "有时候.教官就是那个突然出现在我们生命中却又悄无声息离开的人.\n",
      "教官，军训结束后你们是不是也偷偷的跑掉？\n",
      "我们那年是有一群学生把教官打走的。后来民大把军训停了一年。哈哈哈哈哈哈\n",
      "以后还能不能再见啊 陪我们休息时间玩游戏唱歌叫我欢乐豆的教官啊 为什么连再见都不说啊 当时做最后一排如果不是听同学说真的不知道你们会这样离开\n",
      "我的教官刚才就是偷偷走了\n",
      "如果没有的话 再@你一下\n",
      "我是听到后排的队伍说教官再见才发现他们已经走了，台上的领导让我们不许去追车\n",
      "爷的青春开始\n",
      "\n",
      "\n",
      "我们是去基地训练，教官目送着我们上车走的因为时间紧，有一些教官没办法去送学生。我们教官很好，最后一天我们班还在担心教官会不会偷偷去带下一批学员，但是我们教官没有\n",
      "军训过后新的开始\n",
      "想起以前军训完的时候\n",
      "都被淋的湿湿的了\n",
      "今天我们军训完的时候教官就走了都没来得及看我们领奖\n",
      "我们教官没有说再见就走了\n",
      "我们的教官也是这样悄悄走的\n",
      "我们不能留学生的联系方式，也不能向学生透露自己的联系方式，有的时候真的很舍不得的\n",
      "当时的时候和教官情谊都挺深的那个参谋长比较凶，就完成了带着穆王呢。特别难过。\n",
      "我军训那年，他说如果我们班汇演得了第一，就给我们跳舞，颁完奖以后，他就不见了，也不知道他有没有看到我们班真的拿了第一\n",
      "我好想哭了\n",
      "我天天看到\n",
      "那个时候我们都是从后面走，还是有不少同学追去\n",
      "怕他们拿砖头拍我们\n",
      "民大18届毕业生\n",
      "太伤感了！\n",
      "这一年让我\n",
      "因为情窦初开暗恋上军训我们的教官，20年后我嫁给了军人老公，现在我天天军训他！\n",
      "好舍不得我的眼泪又不争气了\n",
      "爱了\n",
      "想念军训的日子\n",
      "想起大一教官走那天，跟着大巴追，那时的你居然也是个有情感的人……大巴车装走了他们，也装走了短短几天的青春。。。。\n",
      "有点想我们教官了\n",
      "记得我们学校有个班军训结束后几天他们教官又来给全班一人买了个鸡腿那时候真的全校嫉妒\n",
      "\n",
      "我超喜欢我们教官的\n",
      "小姐姐 听说这个学校有民族欺压是这个样子嘛\n",
      "今年我还去带军训，别伤心\n",
      "我们高中就是的\n",
      "当年要不是身穿的军训服都将怀疑是否是场梦……\n",
      "我们都是叫大哥。最后走的时候我们来了一句大哥走好。于是又多跑了两圈\n",
      "\n",
      "\n",
      "想教官了\n",
      "求曲\n",
      "我们连长真的帅爆了\n",
      "背着我们偷偷的走了…\n",
      "我们远走高飞。\n",
      "全国人民记住了，记得你一功\n",
      "为什么短短的几天，我们居然会爱上教官，为什么我们嘴上再多的抱怨，到最后发现他们不辞而别还是会伤心落泪？\n",
      "我们也是，教官就那样走了，我们看见了，舍不得的喊着教官，教官也没有回头，之后我们有问教官，教官说她们也舍不得我们，但是她们不能回头。\n",
      "我闺蜜和她教官结婚了\n",
      "我们教官走的时候每个班班长说立正全体向左半转然后我们集体转身，在班长吼出教官辛苦在由我们统一喊出然后教官才走\n",
      "团结一致\n",
      "背景音乐是什么\n",
      "\n",
      "这个学期素质培训虽然就只有两天，很累但是第二天下午走的时候真的很舍不得教官！\n",
      "突然刷到这个视频，看到教官离去的背影突然莫名的掉眼泪，想想当年都没有好好看教官一眼\n",
      "我的5营\n",
      "这个背景音乐是啥\n",
      "过两天他就要毕业去新兵连了，现在的我见不得他们转身离开的样子，只一眼，泪已落\n",
      "悄悄地离开了，也悄悄地不知不觉地给自己上了一课，国防教育和意识必须有他们正确的教导你。规规矩矩做事儿，认认真真地去做，不要打马虎眼子，其实想多了些生活和战场就是一回事儿，你认真待它，它也会认真待你。\n",
      "母校\n",
      "那时候就很好玩，头顶书，我俩在哪笑，然后教官叫我们顶书跳舞，掉了就蛙跳一圈，当时就不服了，就在也没蛙跳过，废了\n",
      "我们教官在食堂开了一个店卖饭\n",
      "我真的好想我的教官我们给他取名冬瓜，因为他胖胖的圆乎乎的，有时候还时不时说几句脏话，但是我们一点都不觉得别扭或者厌恶反而觉得他可爱，他走的时候都是悄悄地，好难过，晚上都哭了\n",
      "等明年我做军人\n",
      "我们教官军训完把我们一个新老师带走了学都不交了\n",
      "墙头马上遥相顾，一见知君即断肠。\n",
      "18年前大一的事了 阅兵前教官说阅兵后就要走了 当时没有太在意 结果真走了 告别都没有机会了\n",
      "\n",
      "我们教官也是悄悄走了，我还掉眼泪了\n",
      "其实，一直都在\n",
      "完成任务。 立即返回\n",
      "汇演完看到全场没有一个教官。坐在草坪上想着就哭了。我是一个男生\n",
      "我们教官是大四国防生，还是我们直系学长\n",
      "好遗憾啊，当初的梦想就是当兵。你也最喜欢当兵的了\n",
      "教官在会操展演前跟我们说，“做什么事都要认真，好好学习，你们跟我们不一样，你们年轻，前程似锦。”教官只是陪我们走过一段路，但是这段路比往昔多少都会有用\n",
      "当年我们每次都是这样被带走的，我下的口令\n",
      "怕你们难过\n",
      "好\n",
      "什么音乐\n",
      "其实那天晚上我偷偷的看着他离开的背影心里酸酸的，见面不知何时\n",
      "去年军训 我们教官亲自送我们上车 看着我们走的 我们教官很凶 但也很幽默 上车的那一刻 我哭了\n",
      "我也舍不得我的学生们\n",
      "教官们的心里一定也很不舍吧\n"
     ]
    }
   ],
   "source": [
    "# 逐条抓取评论\n",
    "f = open('评论.txt','w',encoding='utf-8')\n",
    "for count in range(1,100):\n",
    "  comment1 = driver.find_element(By.XPATH, f'//*[@id=\"root\"]/div/div[2]/div/div[1]/div[3]/div/div/div[4]/div[{count}]/div/div[2]/p/span[1]/span/span/span/span')\n",
    "  print(comment1.text)\n",
    "  time.sleep(1)\n",
    "  f.write(comment1.text+'\\n')\n",
    "  driver.execute_script('window.scrollBy(0,230)')\n",
    "f.close()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'学校都统一的嘛我们当年教官也是悄悄就走了'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "comment1.text"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将内容保存到文件\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "004de6046f1b3d314f33fdb43a2dc798b2646e5600efd8df5066c8b63a00ff6d"
  },
  "kernelspec": {
   "display_name": "Python 3.8.8rc1 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8rc1"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
